/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;
import bentity.beCoordenada;
import bentity.beLineaTrazabilidad;
import bentity.beLote;
import bentity.bePallet;
import bentity.beProducto;
import bentity.beUbicacion;
import blogic.blPallet;
import blogic.blUbicacion;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;


/**
 *
 * @author cesar
 */
public class daoPallet {
    public static final int E_ACTIVO = 31;
    public static final String ROTURA ="ROTURA";
    public bePallet getPallet(int idUbicacion) throws SQLException{

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        bePallet pallet = new bePallet();
        conn = daoHelper.dameConexion();
        if (idUbicacion!=0){
            String sql = "SELECT P.*,L.FECHA_VENCIMIENTO FROM UBICACION_X_PALLET UP, PALLET P, LOTEPRODUCTO L WHERE P.ID_LOTE = L.ID_LOTE AND ID_UBICACION = ? AND P.ID_PALLET = UP.ID_PALLET";            
            ps = conn.prepareStatement(sql);
            ps.setInt(1, idUbicacion);
            rs = ps.executeQuery();
            rs.next();
            pallet.setId_Pallet(rs.getInt(1));
            pallet.setAncho(rs.getDouble(2));
            pallet.setLargo(rs.getDouble(3));
            pallet.setPeso(rs.getDouble(4));
            pallet.setTipo_pallet(rs.getInt(5));
            pallet.setId_lote(rs.getInt(6));
            pallet.setIdProducto(rs.getInt(7));
            pallet.setNroPallet(rs.getInt(8));
            pallet.setCantCajas(rs.getInt(9));
            pallet.setFechaVencimiento(rs.getDate(10));
            rs.close();
            ps.close();            
        }
        conn.close();
        return pallet;
    }
    
    public int getIdProducto(int idPallet) throws SQLException{
         Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        int idProducto = -1;
        String sql = "SELECT ID_PRODUCTO FROM PALLET WHERE ID_PALLET = ?";
        conn = daoHelper.dameConexion();
        ps = conn.prepareStatement(sql);
        ps.setInt(1, idPallet);
        rs = ps.executeQuery();
        rs.next();
        idProducto = rs.getInt(1);
        rs.close();
        conn.close();
        ps.close();
        return idProducto;
        
    }
    
    public beProducto getProducto(int idProducto) throws SQLException{
        beProducto p = null;
        Connection conn = daoHelper.dameConexion();
        String sql = "SELECT * FROM PRODUCTO WHERE ID_PRODUCTO = ? ";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1,idProducto);
        ResultSet rs = ps.executeQuery();
        if (rs.next())
            p = new beProducto(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getDouble(4),rs.getInt(5),rs.getInt(6));
        rs.close();
        ps.close();
        conn.close();
        return p;
        
    }

    public int getPalletxProd(int idProducto) throws SQLException{
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        int idPallet = -1;
        String sql = "SELECT ID_PALLET FROM PALLET WHERE ID_PRODUCTO = ? ";
        conn = daoHelper.dameConexion();
        ps = conn.prepareStatement(sql);
        ps.setInt(1, idProducto);
        rs = ps.executeQuery();
        rs.next();
        idPallet = rs.getInt(1);
        rs.close();
        ps.close();
        conn.close();
        return idPallet;

    }

    public ArrayList<String> getTipoPallet() throws SQLException{
        ArrayList<String> tiposPallet = new ArrayList<String>();
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String nombreCombo = "PALLET";
        String sql = "SELECT NOMBRE_DATO FROM DATOS_COMBO WHERE NOMBRE_COMBO =?";
        conn = daoHelper.dameConexion();
        ps = conn.prepareStatement(sql);
        ps.setString(1, nombreCombo);
        rs = ps.executeQuery();
        while (rs.next()){
            String nombre_dato = "";
            nombre_dato = rs.getString(1);
            tiposPallet.add(nombre_dato);


        }
        rs.close();
        ps.close();
        conn.close();

        return tiposPallet;

    }

    public ArrayList<bePallet> obtenerPallet(int estado) throws SQLException{
        ArrayList<bePallet> pallets = new ArrayList<bePallet>();
        ArrayList<Integer> ids = new ArrayList<Integer>();
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "SELECT ID_PALLET FROM UBICACION_X_PALLET WHERE ESTADOUBICACION =?";
        conn = daoHelper.dameConexion();
        ps = conn.prepareStatement(sql);
        ps.setInt(1, estado);
        rs = ps.executeQuery();
        int id;
        while (rs.next()){
            id = rs.getInt(1);
            bePallet pallet = new bePallet(id);
            pallets.add(pallet);
        }

        rs.close();
        ps.close();
        conn.close();
        return pallets;
    }

    public ArrayList<String> obtenerProdXPallet(ArrayList<bePallet> pallets) throws SQLException{

        ArrayList<String> productos = new ArrayList<String>();
        ArrayList<Integer> ids = new ArrayList<Integer>();
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null ;
        conn = daoHelper.dameConexion();
        int ind = 0;
        for(int i = 0;i < pallets.size();i++){
           String sql = "SELECT ID_PRODUCTO FROM PALLET WHERE ID_PALLET =?";           
           ps = conn.prepareStatement(sql);
           ps.setInt(1, pallets.get(i).getId_Pallet());
           rs = ps.executeQuery();
           rs.next();
           ids.add(rs.getInt(1));
           ind = 1;
        }

        for(int j =0;j < ids.size(); j++){

           String sql = "SELECT NOMBRE FROM PRODUCTO WHERE ID_PRODUCTO =?";
           ps = conn.prepareStatement(sql);
           ps.setInt(1, ids.get(j));
           rs = ps.executeQuery();
           rs.next();
           productos.add(rs.getString(1));

        }
        if (ind == 1){
          rs.close();
          ps.close();
          conn.close();
        }
       
        return productos;


    }

    public int registrarPallet(bePallet pallet) throws Exception{
        //agregar los parámetros para cantidad de pisos y ubcaciones x piso
        Connection conn = daoHelper.dameConexion();


        String sql = "INSERT INTO PALLET (id_Pallet,ancho_pallet,largo_pallet,peso_maximo,tipo_pallet,id_lote,id_producto,nropallet,cantidad_cajas) VALUES (?,?,?,?,?,?,?,?,?)";
        PreparedStatement ps = conn.prepareStatement(sql);

        pallet.setId_Pallet(daoHelper.getNextId("pallet","id_pallet"));
        ps.setInt(1,pallet.getId_Pallet());
        ps.setDouble(2, pallet.getAncho());
        ps.setDouble(3, pallet.getLargo());
        ps.setDouble(4,pallet.getPeso());
        ps.setInt(5, pallet.getTipo_pallet());
        ps.setInt(6, pallet.getId_lote());
        ps.setInt(7, pallet.getIdProducto());
        ps.setInt(8, pallet.getNroPallet());
        ps.setInt(9, pallet.getCantCajas());
        ps.executeUpdate();
        ps.close();
        conn.close();
        return daoHelper.TRANSACCION_EXITOSA;

    }

    public int registrarPallet_CargaMasiva(bePallet pallet) throws Exception{
        //agregar los parámetros para cantidad de pisos y ubcaciones x piso
        Connection conn = daoHelper.dameConexion();


        String sql = "INSERT INTO PALLET (id_Pallet,ancho_pallet,largo_pallet,peso_maximo,tipo_pallet,id_lote,id_producto,nropallet,cantidad_cajas) VALUES (?,?,?,?,?,?,?,?,?)";
        PreparedStatement ps = conn.prepareStatement(sql);

        pallet.setId_Pallet(daoHelper.getNextId("pallet","id_pallet"));
        ps.setInt(1,pallet.getId_Pallet());
        ps.setDouble(2, pallet.getAncho());
        ps.setDouble(3, pallet.getLargo());
        ps.setDouble(4,pallet.getPeso());
        ps.setInt(5, pallet.getTipo_pallet());
        ps.setInt(6, pallet.getId_lote());
        ps.setInt(7, pallet.getIdProducto());
        ps.setInt(8, pallet.getNroPallet());
        ps.setInt(9, pallet.getCantCajas());
        ps.executeUpdate();
        ps.close();
        conn.close();
        return pallet.getId_Pallet();

    }

    public ArrayList<bePallet> obtenerPalletUbiXInci(ArrayList<String> descripcion, ArrayList<beUbicacion> ubicaciones) throws SQLException{
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        ArrayList<bePallet> pallets = new ArrayList<bePallet> ();
        String sql = "SELECT P.ID_PALLET,I.DESCRIPCION_INCIDENTE, U.ID_UBICACION, U.NUMERO_PISO,U.NUMERO_UBICACION,U.ID_RACK,I.ID_INCIDENTE FROM UBICACION U,UBICACION_X_PALLET UP,PALLET P, INCIDENTE_X_PALLET IP,INCIDENTE I WHERE U.ID_UBICACION = UP.ID_UBICACION AND I.ID_INCIDENTE = IP.ID_INCIDENTE AND P.ID_PALLET = UP.ID_PALLET AND IP.ID_PALLET = P.ID_PALLET AND IP.ESTADO_INC_PAL = ?";
        conn = daoHelper.dameConexion();
        ps = conn.prepareStatement(sql);
        ps.setInt(1,E_ACTIVO);
        rs = ps.executeQuery();
        while (rs.next()) {
           // String cadMay = rs.getString(2).toUpperCase();
           // if(cadMay.compareTo(ROTURA)==0){
                bePallet p = new bePallet();
                beUbicacion u = new beUbicacion();
                u.setId_ubicacion(rs.getInt(3));
                u.setNumPiso(rs.getInt(4));
                u.setNumUbicacion(rs.getInt(5));
                u.setId_rack(rs.getInt(6));
                u.setId_incidente(rs.getInt(7));
                p.setId_Pallet(rs.getInt(1));
                pallets.add(p);
                descripcion.add(rs.getString(2));
                ubicaciones.add (u);
           // }
        }
        rs.close();
        ps.close();
        conn.close();
        return pallets;

    }

     public ArrayList<bePallet> obtenerPalletUbiXInci(ArrayList<String> descripcion,ArrayList<beUbicacion> ubicaciones,String strFila,String strRack,String strPiso,String strUbi) throws SQLException{
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        int []contador = new int[5];
        int Fila = -1;
        int Rack = -1;
        int Piso = -1;
        int Ubi = -1;
        ArrayList<bePallet> pallets = new ArrayList<bePallet> ();
        String sql = "SELECT P.ID_PALLET,I.DESCRIPCION_INCIDENTE, U.ID_UBICACION, U.NUMERO_PISO,U.NUMERO_UBICACION,U.ID_RACK,I.ID_INCIDENTE FROM UBICACION U,UBICACION_X_PALLET UP,PALLET P, INCIDENTE_X_PALLET IP,INCIDENTE I,RACK R WHERE U.ID_UBICACION = UP.ID_UBICACION AND I.ID_INCIDENTE = IP.ID_INCIDENTE AND P.ID_PALLET = UP.ID_PALLET AND IP.ID_PALLET = P.ID_PALLET AND R.ID_RACK = U.ID_RACK AND IP.ESTADO_INC_PAL = ?";
        if (!String.valueOf(strFila).isEmpty()){
            sql += " AND R.NUMERO_FILA = ? ";
            Fila = Integer.parseInt(strFila);
            contador[0] = 1;
        }

        if (!String.valueOf(strRack).isEmpty()){
             sql += " AND R.NUMERO_RACK = ? ";
             Rack = Integer.parseInt(strRack);
             contador[1] = 1;
        }

        if (!String.valueOf(strPiso).isEmpty()){
             sql += " AND U.NUMERO_PISO = ? ";
             Piso = Integer.parseInt(strPiso);
             contador[2] = 1;
        }

         if (!String.valueOf(strUbi).isEmpty()){
             sql += " AND U.NUMERO_UBICACION = ? ";
             Ubi = Integer.parseInt(strUbi);
             contador[3] = 1;
        }


        sql += " ORDER BY U.ID_UBICACION ";
        conn = daoHelper.dameConexion();
        ps = conn.prepareStatement(sql);
        ps.setInt(1,E_ACTIVO);
        int j=1;
        for(int i=0; i<4; i++){
            if (contador[i]==1){
                j++;
                switch (i){

                    case 0:
                        ps.setInt(j,Fila);
                        break;

                    case 1:
                        ps.setInt(j,Rack);
                        break;

                    case 2:
                        ps.setInt(j,Piso);
                        break;

                    case 3:
                        ps.setInt(j,Ubi);
                        break;

                }
            }
        }

        rs = ps.executeQuery();
        while (rs.next()) {
            bePallet p = new bePallet();
            beUbicacion u = new beUbicacion();
            u.setId_ubicacion(rs.getInt(3));
            u.setNumPiso(rs.getInt(4));
            u.setNumUbicacion(rs.getInt(5));
            u.setId_rack(rs.getInt(6));
            u.setId_incidente(rs.getInt(7));
            p.setId_Pallet(rs.getInt(1));
            pallets.add(p);
            descripcion.add(rs.getString(2));
            ubicaciones.add (u);
        }
        rs.close();
        ps.close();
        conn.close();
        return pallets;

     }

    public ArrayList<beUbicacion> obtenerUbicacionPorFechaVencimiento(String strFila,String strRack,String strPiso,String strUbi, String strFechaVencimientoDesde, String strFechaVencimientoHasta) throws SQLException{
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;        
        
        int []contador = new int[7];
        
        int Fila = -1;
        int Rack = -1;
        int Piso = -1;
        int Ubi = -1;


        String sql = "select UP.id_Pallet,R.numero_Rack, R.numero_Fila, U.Numero_Piso, "
                + "U.Numero_Ubicacion,P.id_Producto,P.nombre, LP.fecha_Vencimiento,UP.id_Ubicacion "
                + "from Ubicacion U, Rack R, Ubicacion_x_Pallet UP, "
                + "Producto P, LoteProducto LP, Pallet Pa "
                + "where UP.estadoUbicacion=?"
                + "and R.id_rack = U.id_rack and U.id_ubicacion=UP.id_Ubicacion  "
                + "and UP.id_Pallet=Pa.id_Pallet and Pa.id_Lote=LP.id_Lote and Pa.id_Producto=LP.id_Producto "
                + "and LP.id_Producto=P.id_Producto ";

        contador[0] = 1;
        if (!String.valueOf(strFila).isEmpty()){
            sql += " AND R.NUMERO_FILA = ? ";
            Fila = Integer.parseInt(strFila);
            contador[1] = 1;
        }

        if (!String.valueOf(strRack).isEmpty()){
             sql += " AND R.NUMERO_RACK = ? ";
             Rack = Integer.parseInt(strRack);
             contador[2] = 1;
        }

        if (!String.valueOf(strPiso).isEmpty()){
             sql += " AND U.NUMERO_PISO = ? ";
             Piso = Integer.parseInt(strPiso);
             contador[3] = 1;
        }

         if (!String.valueOf(strUbi).isEmpty()){
             sql += " AND U.NUMERO_UBICACION = ? ";
             Ubi = Integer.parseInt(strUbi);
             contador[4] = 1;
        }       
        
        if (!strFechaVencimientoDesde.isEmpty()){
            sql += " AND LP.Fecha_Vencimiento >= CAST( ? AS DATE ) ";
            contador[5] = 1;            
        }

        if (!strFechaVencimientoHasta.isEmpty()){
            sql += " AND LP.Fecha_Vencimiento <= CAST( ? AS DATE) ";
            contador[6] = 1;
        }

        conn = daoHelper.dameConexion();
        ps = conn.prepareStatement(sql);
        int j=0;
        for(int i=0; i<7; i++){
            if (contador[i]==1){
                j++;
                switch (i){
                    case 0:
                        ps.setInt(j,beUbicacion.U_ACTIVO);
                        break;

                    case 1:
                        ps.setInt(j,Fila);
                        break;

                    case 2:
                        ps.setInt(j,Rack);
                        break;

                    case 3:
                        ps.setInt(j,Piso);
                        break;

                    case 4:
                        ps.setInt(j,Ubi);
                        break;

                    case 5:
                        ps.setString(j,strFechaVencimientoDesde);
                        break;
                    case 6:
                        ps.setString(j,strFechaVencimientoHasta);
                        break;
                }
            }
        }

        rs = ps.executeQuery();
        
        ArrayList<beUbicacion> listaUbicaciones = new ArrayList<beUbicacion>();

        blUbicacion bu = new blUbicacion();
        blPallet bp = new blPallet();
        bePallet p  = new bePallet();
        
        while (rs.next()){
           
            beCoordenada  c = new beCoordenada();
            beUbicacion ubicacion = new beUbicacion();

            c.setRack(rs.getInt(2));
            c.setFila(rs.getInt(3));
            c.setPiso(rs.getInt(4));
            c.setUbicacion(rs.getInt(5));

            ubicacion.setCoordenadas(c);
            ubicacion.setIdProducto(rs.getInt(6));
            ubicacion.setNombProducto(rs.getString(7));
            ubicacion.setIdPallet(rs.getInt(1));
            ubicacion.setFechaVencimiento(rs.getDate(8));
            ubicacion.setIdUbicacion(rs.getInt(9));

            listaUbicaciones.add(ubicacion);
        }
        rs.close();
        ps.close();
        conn.close();
       return listaUbicaciones;

    }

    public ArrayList<bePallet> registrarPalletsPorLote(beLote lote)throws Exception{
        Connection conn = daoHelper.dameConexion();
        String sql = "INSERT INTO PALLET (id_pallet,ancho_pallet,largo_pallet,peso_maximo,tipo_pallet,id_lote,id_producto,nropallet,cantidad_cajas) VALUES (?,?,?,?,?,?,?,?,?)";
        PreparedStatement ps = conn.prepareStatement(sql);
        bePallet pallet;
        ArrayList<bePallet> arrPallets=new ArrayList<bePallet>();
        for(int i=0; i<lote.getCantidadPallets();i++){
            pallet=lote.getPallets().get(i);
            pallet.setId_Pallet(daoHelper.getNextId("pallet","id_pallet"));
            ps.setInt(1,pallet.getId_Pallet());
            ps.setDouble(2, pallet.getAncho());
            ps.setDouble(3, pallet.getLargo());
            ps.setDouble(4,pallet.getPeso());
            ps.setInt(5, pallet.getTipo_pallet());
            ps.setInt(6, pallet.getId_lote());
            ps.setInt(7, pallet.getIdProducto());
            ps.setInt(8, pallet.getNroPallet());
            ps.setInt(9, lote.getCajasPorPallet());
            ps.executeUpdate();
            arrPallets.add(pallet);
        }
        ps.close();
        conn.close();
        return arrPallets;
    }

    public Double[] dameDatosDelTipoPallet(String abreviacionTipoPallet) throws Exception{

        if((abreviacionTipoPallet.compareTo("EU")!=0) && (abreviacionTipoPallet.compareTo("AM")!=0)) return null;

        Double[] datosPallet = new Double[3];
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String nombreAncho = "ANPA"+abreviacionTipoPallet;
        String nombreLargo = "LAPA"+abreviacionTipoPallet;
        String nombrePeso = "PEPA"+abreviacionTipoPallet;

        String sql = "SELECT NOMBRE_DATO FROM DATOS_COMBO WHERE NOMBRE_COMBO =?";
        conn = daoHelper.dameConexion();
        ps = conn.prepareStatement(sql);
        ps.setString(1, nombreAncho);
        rs = ps.executeQuery();
        while (rs.next()){
            datosPallet[0]=Double.parseDouble(rs.getString(1));
        }

        ps = conn.prepareStatement(sql);
        ps.setString(1, nombreLargo);
        rs = ps.executeQuery();
        while (rs.next()){
            datosPallet[1]=Double.parseDouble(rs.getString(1));
        }

        ps = conn.prepareStatement(sql);
        ps.setString(1, nombrePeso);
        rs = ps.executeQuery();
        while (rs.next()){
            datosPallet[2]=Double.parseDouble(rs.getString(1));
        }

        rs.close();
        ps.close();
        conn.close();

        return datosPallet;
    }

    public bePallet queryPalletByID(int idPallet) throws Exception{
        String sql = "SELECT A.*, B.NOMBRE_DATO, D.NOMBRE FROM PALLET A, DATOS_COMBO B, LOTEPRODUCTO C, PRODUCTO D WHERE A.TIPO_PALLET = B.ID_DATO AND A.ID_LOTE = C.ID_LOTE AND C.ID_PRODUCTO = D.ID_PRODUCTO AND ID_PALLET = ?";
        Connection conn = daoHelper.dameConexion();
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1, idPallet);
        ResultSet rs = ps.executeQuery();
        bePallet p = null;
        if (rs.next()){
            p = new bePallet();
            p.setId_Pallet(rs.getInt(1));
            p.setAncho(rs.getDouble(2));
            p.setLargo(rs.getDouble(3));
            p.setPeso(rs.getDouble(4));
            p.setTipo_pallet(rs.getInt(5));
            p.setId_lote(rs.getInt(6));
            p.setIdProducto(rs.getInt(7));
            p.setNroPallet(rs.getInt(8));
            p.setCantCajas(rs.getInt(9));
            p.setTipoPallet(rs.getString(10));
            p.setDescProducto(rs.getString(11));            
        }
        rs.close();     
        ps.close();
        conn.close();
        return p;
    }

    public ArrayList<beLineaTrazabilidad> queryHistorialUbicsByIdPallet(int id_Pallet) throws Exception{
        String sql = "";
        sql += "SELECT A.ID_UBICACION, A.FECHAUBICACION, A.MOTIVO, B.NUMERO_PISO, B.NUMERO_UBICACION, C.NUMERO_FILA, C.NUMERO_RACK, A.ESTADOUBICACION, A.FECHASALIDA ";
        sql += "FROM UBICACION_X_PALLET A, UBICACION B, RACK C ";
        sql += "WHERE A.ID_UBICACION = B.ID_UBICACION AND B.ID_RACK = C.ID_RACK AND ID_PALLET = ?";
        sql += "ORDER BY FECHAUBICACION";
        Connection conn = daoHelper.dameConexion();
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1, id_Pallet);
        ResultSet rs = ps.executeQuery();
        ArrayList<beLineaTrazabilidad> lineas = new ArrayList<beLineaTrazabilidad>();
        beLineaTrazabilidad l = null;
        beUbicacion u = null;
        beCoordenada c = null;
        blUbicacion blu = new blUbicacion();
        while (rs.next()){
            c = new beCoordenada();
            c.setFila(rs.getInt(6));
            c.setRack(rs.getInt(7));
            c.setPiso(rs.getInt(4));
            c.setUbicacion(rs.getInt(5));
            u = new beUbicacion();
            u.setId_ubicacion(rs.getInt(1));
            u.setCoordenadas(c);
            l = new beLineaTrazabilidad();
            l.setFecha(new Date(rs.getTimestamp(2).getTime()));
            l.setUbic(u);
            l.setMotivo(rs.getString(3));
            if (rs.getTimestamp(9) != null)
                l.setFechaSalida(new Date(rs.getTimestamp(9).getTime()));
            lineas.add(l);
        }
        rs.close();
        ps.close();
        conn.close();
        return lineas;
    }

    public int getEstadoUbicacionPallet(int id_Pallet, int id_ubicacion) throws Exception{
        String sql = "SELECT ESTADOUBICACION FROM UBICACION_X_PALLET WHERE ID_UBICACION = ? AND ID_PALLET = ?";
        Connection conn = daoHelper.dameConexion();
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1, id_ubicacion);
        ps.setInt(2, id_Pallet);
        ResultSet rs = ps.executeQuery();
        int estado = -1;
        if (rs.next())
            estado = rs.getInt(1);
        rs.close();
        ps.close();
        conn.close();
        return estado;
    }

    public int obtenerIdOrdenDespacho(int id_Pallet, int id_ubicacion) throws Exception{
        String sql = "SELECT ID_ORDEN_DESPACHO FROM UBICACION_X_PALLET WHERE ID_UBICACION = ? AND ID_PALLET = ?";
        Connection conn = daoHelper.dameConexion();
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1, id_ubicacion);
        ps.setInt(2, id_Pallet);
        ResultSet rs = ps.executeQuery();
        int id_orden_despacho = -1;
        if (rs.next())
            id_orden_despacho = rs.getInt(1);
        rs.close();
        ps.close();
        conn.close();
        return id_orden_despacho;
    }

    public Date obtenerFechaDespacho(int idOrdenDespacho) throws Exception{
        String sql = "SELECT FECHA_DESPACHO FROM ORDEN_DESPACHO WHERE ID_ORDEN_DESPACHO = ?";
        Connection conn = daoHelper.dameConexion();
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1, idOrdenDespacho);
        ResultSet rs = ps.executeQuery();
        Date fecha = null;
        if (rs.next())
            fecha = rs.getDate(1);
        rs.close();
        ps.close();
        conn.close();
        return fecha;
    }

     public int obtenerCajas(int idPallet) throws SQLException{
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        int numCajas = -1;
        String sql = " SELECT CANTIDAD_CAJAS FROM PALLET WHERE ID_PALLET =?";
        conn = daoHelper.dameConexion();
        ps = conn.prepareStatement(sql);
        ps.setInt(1,idPallet);
        rs = ps.executeQuery();
        rs.next();
        numCajas = rs.getInt(1);
        rs.close();
        ps.close();
        conn.close();
        return numCajas;



    }

     public ArrayList<bePallet> obtenerPalletXOrden(int idOrden) throws SQLException{
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
       // int numCajas = -1;
        String sql = " SELECT P.ID_PALLET,P.CANTIDAD_CAJAS FROM PALLET P,UBICACION_X_PALLET UP WHERE P.ID_PALLET = UP.ID_PALLET AND UP.ID_ORDEN_DESPACHO = ?";
        conn = daoHelper.dameConexion();
        ps = conn.prepareStatement(sql);
        ps.setInt(1,idOrden);
        rs = ps.executeQuery();
        rs.next();
        bePallet p = new bePallet();
        ArrayList<bePallet> pallets = new ArrayList<bePallet>();
        p.setId_Pallet(rs.getInt(1));
        p.setCantCajas(rs.getInt(2));
        pallets.add(p);
        return pallets;


    }
     public ArrayList<bePallet> obtenerPalletXOrden2(int idOrden) throws SQLException{
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
       // int numCajas = -1;
        String sql = " SELECT P.ID_PALLET,P.CANTIDAD_CAJAS,P.ID_LOTE,P.ID_PRODUCTO FROM PALLET P,UBICACION_X_PALLET UP WHERE P.ID_PALLET = UP.ID_PALLET AND UP.ID_ORDEN_DESPACHO = ?";
        conn = daoHelper.dameConexion();
        ps = conn.prepareStatement(sql);
        ps.setInt(1,idOrden);
        rs = ps.executeQuery();
        ArrayList<bePallet> pallets = new ArrayList<bePallet>();
        while(rs.next()){
         bePallet p = new bePallet();
         p.setIdProducto(rs.getInt(4));
         p.setId_Pallet(rs.getInt(1));
         p.setCantCajas(rs.getInt(2));
         p.setId_lote(rs.getInt(3));
         pallets.add(p);
         }
        rs.close();
        ps.close();
        conn.close();
        return pallets;
    }

    public int actualizarStock(ArrayList<bePallet> arrPallets) throws SQLException{
        Connection conn = daoHelper.dameConexion();
        int cantCajas=-1;
        int idPall=-1;
        String sql = null;
        PreparedStatement ps=conn.prepareStatement("SELECT * FROM PRODUCTO");

        for(int i=0;i<arrPallets.size();i++){
            cantCajas=arrPallets.get(i).getCantCajas();
            idPall=arrPallets.get(i).getId_Pallet();
            sql =  sql = "UPDATE PRODUCTO SET STOCK= (SELECT (STOCK - ?) AS DEC FROM PRODUCTO WHERE PRODUCTO.ID_PRODUCTO = PALLET.ID_PRODUCTO) "
            + "FROM PALLET , UBICACION_X_PALLET WHERE PRODUCTO.ID_PRODUCTO = PALLET.ID_PRODUCTO AND "
            + "PALLET.ID_PALLET = UBICACION_X_PALLET.ID_PALLET AND UBICACION_X_PALLET.ID_PALLET = ?";

            ps = conn.prepareStatement(sql);

            ps.setInt(1, cantCajas);
           // ps.setInt(1,arrPallets.get(i).getId_lote());
            ps.setInt(2,idPall);
            ps.executeUpdate();

        }

        ps.close();
        conn.close();
        return daoHelper.TRANSACCION_EXITOSA;

    }


}
